<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue 3 toRefs 响应式解构示例</title>
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  <style>
    body {
      font-family: 'Arial', sans-serif;
      max-width: 600px;
      margin: 0 auto;
      padding: 20px;
      background-color: #f5f5f5;
    }
    .container {
      background: white;
      border-radius: 8px;
      padding: 30px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.1);
      text-align: center;
    }
    h1 {
      color: #42b983;
      margin-bottom: 30px;
    }
    h3 {
      color: #333;
      font-size: 24px;
      margin: 20px 0;
    }
    p {
      color: #666;
      font-size: 16px;
      margin: 15px 0;
    }
    button {
      background: #42b983;
      color: white;
      border: none;
      padding: 12px 24px;
      border-radius: 6px;
      cursor: pointer;
      font-size: 16px;
      margin: 10px;
      transition: background 0.3s;
    }
    button:hover {
      background: #3aa876;
    }
    button:disabled {
      background: #ccc;
      cursor: not-allowed;
    }
    .highlight {
      color: #e74c3c;
      font-weight: bold;
    }
    .info {
      background: #e8f5e8;
      border-left: 4px solid #42b983;
      padding: 15px;
      margin: 20px 0;
      text-align: left;
      border-radius: 4px;
    }
    .skill-tag {
      display: inline-block;
      background: #42b983;
      color: white;
      padding: 4px 8px;
      border-radius: 4px;
      margin: 2px;
      font-size: 14px;
    }
  </style>
</head>
<body>
  <div id="app">
    <div class="container">
      <h1>🧙‍♂️ Vue 3 toRefs 响应式解构学习</h1>
      
      <div class="info">
        <strong>📚 学习目标：</strong> 学习如何使用 toRefs 进行安全的响应式解构，保持数据的响应性！
      </div>
      
      <h3>{{ name }} Lv.{{ level }}</h3>
      <p>技能列表：</p>
      <div>
        <span v-for="skill in hero.skills" :key="skill" class="skill-tag">{{ skill }}</span>
      </div>
      
      <button @click="levelUp" :disabled="level >= 5">
        {{ level >= 5 ? '已达到最高等级' : '打怪升级' }}
      </button>
      
      <button @click="resetHero" style="background: #e74c3c;">
        重置英雄
      </button>
      
      <div class="info" v-if="level >= 3">
        <strong>🎉 恭喜！</strong> 你已经学会了新技能！<br>
        这展示了 toRefs 如何保持解构后的响应性。
      </div>
    </div>
  </div>

  <script>
    // 使用Vue 3的Composition API
    const { createApp, reactive, toRefs } = Vue;

    // 创建Vue应用
    createApp({
      setup() {
        // 1. 定义TypeScript类型（在纯JS中作为注释）
        // interface Hero {
        //   name: string
        //   level: number
        //   skills: string[]
        // }

        // 2. 创建响应式对象
        const hero = reactive({
          name: 'Vue 法师',
          level: 1,
          skills: ['火球术']
        });

        // 3. 安全解构（保持响应性）
        // 使用toRefs将reactive对象的属性转换为ref
        const { name, level } = toRefs(hero);

        // 4. 升级函数
        const levelUp = () => {
          level.value++;
          if (level.value === 3) {
            hero.skills.push('冰冻术');
          }
          if (level.value === 5) {
            hero.skills.push('闪电链');
          }
        };

        // 5. 重置函数
        const resetHero = () => {
          hero.name = 'Vue 法师';
          hero.level = 1;
          hero.skills = ['火球术'];
        };

        // 返回模板需要的数据和方法
        return {
          // 解构后的响应式数据
          name,
          level,
          hero,
          // 方法
          levelUp,
          resetHero
        };
      }
    }).mount('#app');
  </script>
</body>
</html>